package com.example.apidocserver.domain.document.event;

import com.example.apidocserver.application.dto.UserDocInfoDto;
import com.example.apidocserver.domain.document.dto.UploadMenuApiDto;
import com.example.apidocserver.domain.document.entity.ApiDocument;
import com.example.apidocserver.domain.document.entity.DocMenu;
import com.example.apidocserver.domain.user.entity.DocUsrHis;
import com.example.apidocserver.interfaces.vo.DocumentVo;
import com.example.apidocserver.interfaces.vo.OrderChangeVo;

/**
 * 文档领域驱动事件
 *
 * @author xyqlg
 */
public interface DocumentDomainEvent {
    /**
     * 设置当前空间文档信息
     *
     * @param documentVo  文档返回信息对象
     * @param usrLastInfo 用户信息
     */
    void setCurrentSpaceDocs(DocumentVo documentVo, DocUsrHis usrLastInfo);

    /**
     * 设置当前文档目录
     *
     * @param documentVo  文档返回信息对象
     * @param usrLastInfo 用户信息
     */
    void setCurrentMenu(DocumentVo documentVo, DocUsrHis usrLastInfo);

    /**
     * 增加文档
     *
     * @param document       文档信息
     * @param usrLastInfo 用户信息
     * @return 增加成功后文档
     */
    ApiDocument addDoc(ApiDocument document, DocUsrHis usrLastInfo);

    /**
     * 根据文档id查询文档信息
     *
     * @param docId 文档id
     * @return 文档信息
     */
    ApiDocument findDocById(Integer docId);

    /**
     * 增加或修改文档目录
     *
     * @param docMenu 文档目录数据传递对象
     * @return 文档目录数据
     */
    DocMenu upsertDocMenu(DocMenu docMenu);


    /**
     * 数据移动位置
     *
     * @param params 实体
     * @return 修改数量
     */
    int orderChangeMenu(OrderChangeVo params);

    /**
     * 删除文档目录
     *
     * @param id 目录id
     * @return 删除数量
     */
    int deleteMenu(Integer id);

    /**
     * 检测文档是否存在，如果不存在则直接报错
     *
     * @param docId id
     */
    void checkById(Integer docId);

    /**
     * 增加目录树
     *
     * @param menuApiDto 导入文档信息
     */
    void insertMenuTrees(UploadMenuApiDto menuApiDto);
}
